package com.nebula.common.datasource;


import com.nebula.common.datasource.mongo.db.MongoDB;
import com.nebula.common.datasource.mybatis.db.MybatisDB;
import com.nebula.common.datasource.redis.db.RedisDB;

public abstract class MultipleDataSource{

	private  String defaultRedisName;
	private  String defaultMongoName;
	private  String defaultMysqlShardName;
	private  String defaultMysqlName;

	protected void setDefaultRedisName(String defaultRedisName){
		this.defaultRedisName=defaultRedisName;
	}
	protected  void setDefaultMongoName(String defaultMongoName){
		this.defaultMongoName=defaultMongoName;
	}
	protected  void setDefaultMysqlShardName(String defaultMysqlShardName){this.defaultMysqlShardName=defaultMysqlShardName;}
	protected  void setDefaultMysqlName(String defaultMysqlName){this.defaultMysqlName=defaultMysqlName;}

	protected abstract void initDefaultDs();

	/**
	 * 默认redis
	 * @return
	 */
	public RedisDB redis(){
		initDefaultDs();
		RedisDB redisDB= new RedisDB(defaultRedisName);
		return redisDB;
	}

	/**
	 * 按名称取redis
	 * @param redisName
	 * @return
	 */
	public  RedisDB redis(String redisName){
		RedisDB redisDB= new RedisDB(redisName);
		return redisDB;
	}

	/**
	 * 默认mybatis
	 * @return
	 */
	public MybatisDB mybatis(){
		initDefaultDs();
		return  new MybatisDB(defaultMysqlShardName,defaultMysqlName);
	}



	/**
	 * 按名称取mybatis
	 * @param mysqlShardName
	 * @return
	 */
	public   MybatisDB mybatis(String mysqlShardName){
		return  new MybatisDB(mysqlShardName,null);
	}


	/**
	 * 默认mongod
	 * @return
	 */
	public MongoDB mongo(){
		initDefaultDs();
		return  new MongoDB(defaultMongoName);
	}

	/**
	 * 按名称mongo
	 * @param mongoName
	 * @return
	 */
	public  MongoDB mongo(String mongoName){
		return  new MongoDB(mongoName);
	}
}
